// axios 二次封装
import axios from 'axios'
import { ElMessage } from 'element-plus';

const request = axios.create({
    baseURL: 'https://v3pz.itndedu.com/v3pz/',
    timeout: 5000
})

const whiteList = ['/login', "/get/code", '/user/authentication'] // 白名单，不需要 token 的请求
// 请求拦截器
request.interceptors.request.use(
    config => {
        const token = localStorage.getItem('token');
        if (token && !whiteList.includes(config.url)) {
            config.headers['x-token'] = token;
        }
        return config;
    },
    error => {
        return Promise.reject(error);
    }
);

// 响应拦截器
// 响应拦截器
request.interceptors.response.use(
    response => {
        // 防御性判断
        if (!response.data) {
            ElMessage.error('服务器响应异常，请稍后再试');
            return Promise.reject(new Error('服务器响应异常'));
        }

        const { code, message } = response.data;

        // 登录过期处理
        if (code === -2) {
            ElMessage.error(message || '登录已过期，请重新登录');
            localStorage.removeItem('token');
            localStorage.removeItem('userInfo');
            window.location.href = '/login';
            return Promise.reject(new Error('登录已过期'));
        }

        // 通用业务错误处理（包含 code === -1 的情况）
        if (code === -1) {
            ElMessage.warning(message || '请求失败');
            return Promise.reject(new Error(message || '请求失败'));
        }

        // 其他成功状态码都正常返回数据
        return response.data;
    },
    error => {
        ElMessage.error('网络异常，请检查您的网络连接');
        return Promise.reject(error);
    }
);

export default request